7
תגובות

RewriteRule למקד את התנאי

פתח mmh19 ,
שלום,
יש לי בעיה קטנה,
עשיתי שכתוב כשנגשים לכתובת domain.com/en זה יהיה כאילו ניגשו לdomain.com/?lang=en
זה התנאי:
RewriteRule ^(en|ru|es)/(.+)?$  $2?lang=$1 [QSA]


עכשיו מה שקורה זה שגם אם נכנס לכתובת domain.com/en/en זה עדיין יעבוד...

איך ניתן למקד את התנאי יותר?
למה ה^ לא עוזר?

תודה לעוזרים :)

7 תשובות

avatar ענה dekelyi ב 23 לאפריל 2013 #

1) למה ה-? אחרי הקבוצה השנייה? זה לא עושה כלום..
2) לפי האתר הבא (http://martinmelin.se/rewrite-rule-tester/) שמאפשר לבדוק rewrite זה עובד..
3) אולי זה קשור לסלאשים במערכות שונות - בחלק זה / ובחלק זה \

avatar ענה mmh19 ב 23 לאפריל 2013 #

הקבוצה השניה זה כי ניתן לגשת גם בלי וגם עם..
והבעיה היא לא שזה לא עובד,
אלא שזה עובד יותר מידי טוב...

avatar ענה dekelyi ב 23 לאפריל 2013 #

1) אני לא שואל למה הקבוצה השנייה, אני שואל למה יש אחריה ? שאומר 1 או 0
2) תגדיר "עובד יותר מדי טוב"

avatar ענה mmh19 ב 23 לאפריל 2013 #

1) כי זה מתאים ל2 הנתיבים הבאים:
/en/page.php
/en/
2) כבר הגדרתי:
גם כשנכנסים ל/en/en/ (שים לב לכפילות של השפה) זה עובד.

avatar ענה iiddaannyy ב 23 לאפריל 2013 #

זה אמור לעבוד.
אני רוצה להכנס לעמוד en שבשפה האנגלית, למה אסור לי?

avatar ענה mmh19 ב 23 לאפריל 2013 #

אממ,
עידן עכשיו הבהרת לי נקודה חשובה.
אבל עדיין מילא נניח שלעמוד קוראים en/page.php למה זה לא מחזיר שגיאה שהעמוד לא נמצא?

avatar ענה intval ב 25 לאפריל 2013 #

קורה שם משהו יחסית מעניין.
בבקשה הראשנה ל site.com/en/en
השרת מבין את הקישור בתור
site.com/en?lang=en
ועושה בקשה פנימית חדשה
הבקשה החדשה גם כן עוברת דרך כללי ה rewrite
והיא מתורגמת מ site.com/en?lang=en
למשהו כמו site.com/?lang=en&lang=en
ש PHP מבין בתור פרמטר אחד (לא שניים).

תנסה להוסיף את הסימון L ל rewriteRule שאומר LAST, כלומר זה התנאי האחרון שיפוענח עבור הבקשה של המשתמש לשרת.

RewriteRule ^(en|ru|es)/(.+)?$  $2?lang=$1 [QSA,L,NC]



nc = no case